package org.tianff.util.wechatapi;

import com.sun.istack.internal.Nullable;

import javax.validation.constraints.NotNull;

/**
 * Created by Tianff on 2017/7/18.
 */
public final class GenerateWeChatAPI {

    private static final String BASE_OAUTH_GET_CODE_API = "https://open.weixin.qq.com/connect/qrconnect?";
    private static final String BASE_OAUTH_GET_ACCESS_TOKEN_API = "https://api.weixin.qq.com/sns/oauth2/access_token?";

    private GenerateWeChatAPI(){}



    /**
     * 拼接 获取code URL的方法
     * @param appID 应用唯一标识，在微信开放平台提交应用审核通过后获得
     * @param callback_url 微信认证成功过后回调
     * @param response_type 填code
     * @param scope 应用授权作用域，拥有多个作用域用逗号（,）分隔，网页应用目前仅填写snsapi_login即可
     * @param state 类似于Spring-security的_csrf参数，防止CSRF攻击
     * @return API 如 https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
     */
    public static String generateOAuthGetCodeAPI(@NotNull String appID, @NotNull String callback_url,
                                                 @NotNull String response_type, @NotNull String scope,
                                                 @Nullable String state){

        StringBuilder sb=new StringBuilder(BASE_OAUTH_GET_CODE_API);
        sb.append("appid").append(appID).append("&");
        sb.append("redirect_uri").append(callback_url).append("&");
        sb.append("response_type").append(response_type).append("&");
        sb.append("scope").append(scope).append("&");
        sb.append("state").append(state);

        return sb.toString();
    }


    /**
     *拼接 获取access_token URL的方法
     * @param appid 应用唯一标识，在微信开放平台提交应用审核通过后获得
     * @param secret 应用密钥AppSecret，在微信开放平台提交应用审核通过后获得
     * @param code 填写第一步获取的code参数
     * @param grant_type 填authorization_code
     * @return API
     */
    public static String generateOAuthGetAccessTokenAPI(@NotNull String appid,
                                                        @NotNull String secret,
                                                        @NotNull String code,
                                                        @NotNull String grant_type){

        StringBuilder sb=new StringBuilder(BASE_OAUTH_GET_ACCESS_TOKEN_API);
        sb.append("appid").append(appid).append("&");
        sb.append("secret").append(secret).append("&");
        sb.append("code").append(code).append("&");
        sb.append("grant_type").append(grant_type);

        return sb.toString();
    }


}
